package acm.蓝桥13;

import java.util.Scanner;

public class G李白醉酒 {
    /**
     * 状态定义：dp[i][j][k]，李白在遇了i,次店,j次花，剩余k斗时的情况
     * 操作：
     *      遇一次店，dp[i][j][k]=dp[i-1][j][k],k*2<=j&&i>0
     *      遇一次话：dp[i][j][k]=dp[i][j-1][k-1],j>0&&k>0
     */
    static Integer[][][] dp=new Integer[101][101][101];
    static int mod=1000000007;
    public static int dfs(int i,int j,int k){
        if (j==1&&k==1&&i==0){  //最后一步必须是花
            return 1;
        }
        if (j==0||k>j||k==0)  return 0;
        if (dp[i][j][k]!=null) return dp[i][j][k];
        long op1=0;
        if (i>0){
            op1= dfs(i - 1, j, k * 2);
        }
        long op2=0;
        if (j>0){
            op2=dfs(i,j-1,k-1);;
        }
        dp[i][j][k]=(int)(op1+op2)%mod;
        return dp[i][j][k];
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int i = sc.nextInt();
        int j = sc.nextInt();
        long dfs = dfs(i, j, 2);
        System.out.println(dfs);
    }
}
